package com.internetCafes.spms.web.certificate.dao;

import com.baomidou.mybatisplus.annotation.SqlParser;
import com.internetCafes.spms.core.annotation.NoTentant;
import com.internetCafes.spms.core.annotation.TentantFilter;
import com.internetCafes.spms.core.generic.GenericDao;
import com.internetCafes.spms.web.certificate.entity.EmployeeInfo;
import com.internetCafes.spms.web.certificate.model.employee.podo.EmployeeDo;
import com.internetCafes.spms.web.certificate.model.employee.podo.EmployeePo;
import com.internetCafes.spms.web.certificate.model.podo.EmployeeInfoDo;
import com.internetCafes.spms.web.certificate.model.podo.EmployeeInfoPo;
import com.internetCafes.spms.web.certificate.vo.EmployeeInfoVo;
import com.internetCafes.spms.web.certificate.vo.EntryQuitInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 员工信息表
 *
 * @author Sunny
 * @email rekeeper2011@hotmail.com
 * @date 2019-10-31 18:10:59
 */
@Mapper
public interface EmployeeInfoMapper extends GenericDao<EmployeeInfo, Long> {

    /**
     * 获取人员列表
     *
     * @param employeeDo 请求参数
     * @return 列表
     */
    List<EmployeePo> list(@Param("employeeDo") EmployeeDo employeeDo);

    /**
     * 获取人员列表信息
     *
     * @param employeeInfoDo 请求参数
     * @return 人员列表
     */
    @NoTentant
    List<EmployeeInfoPo> listPoNoTenantId(@Param("employeeInfoDo") EmployeeInfoDo employeeInfoDo);

    /**
     * 获取人员列表，并进行去重操作，获取人员
     *
     * @return 人员列表
     * @author Zheng
     */
    List<EmployeeInfo> queryRepeat();

    /**
     * 为对应企业id获取employeeFlag为1，deptId为null的人员信息进行更新部门id
     *
     * @author Zheng
     */
    void updateNonDeptIdEmployees(Map<String, Object> params);

    /**
     * 获取employeeFlag为1，deptId为null 或者 0 的数据
     *
     * @return 员工信息列表
     * @author Zheng
     */
    List<EmployeeInfo> queryEmployeeNonDeptId();

    /**
     * 将企业用户中所有employeeFlag为1，type为0的数据，将type置为23
     *
     * @author Zheng
     */
    void repairEmployeeTypeError();

    /**
     * 员工employee_flag错误信息修复
     *
     * @author Zheng
     */
    void repairEmployeeFlagErrorInfo();

    /**
     * 删除多余的员工信息
     *
     * @param params idCard id 不删除的id
     * @author Zheng
     */
    void removalRepeatEmployee(Map<String, Object> params);

    /**
     * 获取重复人员信息列表 id 身份证
     *
     * @return 人员信息
     */
    List<EmployeeInfo> queryListForRepeat();

    /**
     * 插入
     */
    int insert(EmployeeInfo employeeInfo);

    /**
     * 批量插入
     */
    int insertBatch(List<EmployeeInfo> employeeInfoList);

    /**
     * 选择插入
     */
    int insertSelective(EmployeeInfo employeeInfo);

    /**
     * 按主键ID查询
     */
    EmployeeInfo selectByPrimaryKey(Long id);

    /**
     * 获取对应月份数据
     *
     * @return
     */
    @SqlParser(filter = true)
    EntryQuitInfo countByMonth(EmployeeInfo employeeInfo);

    /**
     * 按主键ID选择更新
     */
    int updateByPrimaryKeySelective(EmployeeInfo employeeInfo);

    /**
     * 按主键ID更新
     */
    int updateByPrimaryKey(EmployeeInfo employeeInfo);

    /**
     * 按主键ID更新
     */
    int updateEntireByPrimaryKey(EmployeeInfo employeeInfo);

    /**
     * 按参数查询
     */
    List<EmployeeInfo> selectByParams(Map<String, Object> params);

    /**
     * 按参数查询数量
     */
    long countByParams(Map<String, Object> params);

    /**
     * 按主键ID删除
     */
    int deleteByPrimaryKey(Long id);

    /**
     * 按主键ID批量删除
     */
    int deleteBatchByPrimaryKey(List<Long> ids);

    /**
     * @param params
     * @return
     */
    @TentantFilter(tableAlias = "e")
    List<EmployeeInfoVo> selectByParamsUnionDept(Map<String, Object> params);

    /**
     * @param params
     * @return
     */
    @TentantFilter(tableAlias = "e")
    Long countByParamsUnionDept(Map<String, Object> params);

    /**
     * @param params
     * @return
     */
    @NoTentant
    List<EmployeeInfoVo> selectByParamsUnionTenant(Map<String, Object> params);


    /**
     * 按参数查询
     */
    List<EmployeeInfoVo> selectByJobParams(Map<String, Object> params);

    List<EmployeeInfoVo> selectByParamsUnionCertificate(Map<String, Object> params);

}
